Basic Understanding Of Page Object Model In Selenium Using Page Factory

您所在的位置:网站首页 page factory in pom Basic Understanding Of Page Object Model In Selenium Using Page Factory

Basic Understanding Of Page Object Model In Selenium Using Page Factory

#Basic Understanding Of Page Object Model In Selenium Using Page Factory| 来源: 网络整理| 查看: 265

Today we are going to see one of important topic in the selenium framework which is the “Page object model with page factory”. It makes a very important role while designing a testing framework for the project. In this blog, we are going to focus on :

>> Introduction of “Page Object Model” (POM)

>> Basic Rules of POM

>> Advantages of the Page Object Model

>> Basic Information of “Page Factory”

>> Different Types of Locators in Selenium

>> Creating a Page Object Model in Java

Introduction of “Page Object Model” (POM)

Page Object Model, also known as POM, is a design pattern in Selenium that creates an object repository for storing all web elements. POM is can be used with any kind of framework like keyword-driven, Data-driven, hybrid framework etc. It’s an approach to systematically organizing the scripts in such a way that it makes it easy to maintain the code free of hassles and also helps to prevent redundant or duplicate code. Every single web page in the application must have its own corresponding page class, which is in charge of searching the WebElements in that page and then execute operations on them. For instance, if there is a change in the locator value on a specific page, then it is very easy to identify and make the quick change only in the respective page without impacting the code elsewhere.

Basic Rules of POM

>> Do not Write Assert.assertEquals Method in Page Class (POM Class)

>> Assertion is always in test Class Because assertion is part of testng class and test class is for validation.

>> Never used driver.findby in test class always used in the page class because driver is interacting with the UI.

Advantages Of Page Object Model

>> It is useful for maintaining the code (flow in the UI is separated from verification)

>> Makes code readable (Methods get more realistic names)

>> Makes the code reusable (object repository is independent of test cases)

>> The Code becomes less and optimized

Basic Information of “Page Factory”

>> The model helps to handle page object models in new way and its easy to implement. It include inbuilt concept for the Page object model.

>> Page Factory is a class provided by Selenium Webdriver to support Page Object Design patterns.

>> Allows storing of page element in cache memory using @CacheLookUp annotation. Which in return improves performance of Automation.

>> In-Page Factory, testers use @FindBy annotation to locate and declare web elements using different locators. The initElements method is used to initialize web elements. Below is an example of declaring an element using @FindBy

@FindBy(id="elementId") WebElement element;Different Types of Locators in Selenium

>> By CSS ID: findElement (By.id(“Id”));

>> By CSS class name: findElement (By.className(“class”));

>> By name attribute: findElement (By.name(“name”));

>> By Xpath: findElement(By.xpath(“xpath”));

>> By tagName: findElement(By.tagName(“htmlTag”));

>> By link text: findElement(By.linkText(“textoflink”));

>> By partial link text: findElement(By.partialLinkText(“partialtextoflink”));

Creating a Page Object Model Using Page Factory in Java Bellow Sample Example :

In the Bellow Example First I created separate page for Login.java and HomePage.java in that class I m going to write web element using Page Factory concept @FindBy annotation and initElements method is used to initialize web elements methods. after that in HomePageTest.java class I write the validation of HomePage in test class.

Login page with Page Factorypackage PageFactory; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class Login { //Page Factory WebDriver driver; @FindBy(name="username") WebElement username; @FindBy(name="password") WebElement password; @FindBy(className="amazon") WebElement titleText; @FindBy(xpath="//input[@type='submit']") WebElement loginBtn; public Login(WebDriver driver){ this.driver = driver; //This initElements method will create all WebElements PageFactory.initElements(driver, this); } //Set user name in textbox public void setUserName(String UserName){ username.sendKeys(UserName); } //Set password in password textbox public void setPassword(String Password){ password.sendKeys(Password); } //Click on login button public void clickLogin(){ loginBtn.click(); } //Get the title of Login Page public String getLoginTitle(){ return titleText.getText(); } /** This POM method will be used in test case to login in the application * @param strUserName * @param strPasword * @return */ public void loginToamazon(String UserName, String Password){ //Fill user name this.setUserName(UserName); //Fill password this.setPassword(Password); //Click Login button this.clickLogin(); } }Home Page with Page Factorypackage PageFactory; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class HomePage { WebDriver driver; @FindBy(xpath="//*[@id='ap_email']") WebElement homePageUserName; public HomePage(WebDriver driver){ this.driver = driver; //This initElements method will create all WebElements PageFactory.initElements(driver, this); } //Get the User name from Home Page public String getHomePageDashboardUserName(){ return homePageUserName.getText(); } }HomePageTest with Page Factory conceptpackage test; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.Assert; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import PageFactory.HomePage; import PageFactory.Login; public class HomePageTest{ String driverPath = "C:\\chromedriver.exe"; WebDriver driver; Login objLogin; HomePage objHomePage; @BeforeTest public void setup(){ System.setProperty("webdriver.chrome.driver", driverPath); driver = new ChromeDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("https://www.amazon.com/"); } /** * This test go to https://www.amazon.com/ * Verify login page title as amazon * Login to application * Verify the home page using Dashboard message */ @Test(priority=0) public void test_Home_Page(){ //Create Login Page object objLogin = new Login(driver); //Verify login page title String loginPageTitle = objLogin.getLoginTitle(); Assert.assertTrue(loginPageTitle,"amazon","Login page title not matched"); //login to application objLogin.loginToamazon("abc", "123"); // go the next page objHomePage = new HomePage(driver); //Verify home page String homePageUserName = objHomePage.getHomePageDashboardUserName(); Assert.assertEquals(homePageUserName, "Expected Username", "Home page username not matched"); } }

This was just a demo for the understanding of the POM Using Page Factory. In actual project will require several updations like creating Base Class in that we have to intitalized all the webdriver and wait, creating utility classes for database connectivity, passing test data through config files, etc.

These additional components help to create a more robust and maintainable test automation framework that can handle a variety of scenarios and requirements.

Enjoy your learning journey! Keep exploring new horizons!



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3